﻿$(document).ready(function () {
    $("input[type='text']").each(function (index) {
        this.autocomplete = "off";
    });
});

var myTable;
$(function () {
    myTable = new TableInit();
    myTable.Init();

    //2.初始化Button的点击事件
    var oButtonInit = new ButtonInit();
    oButtonInit.Init();
});


var currentRow;//当前选中行
var TableInit = function () {
    var myTableInit = new Object();
    //初始化Table
    myTableInit.Init = function () {
        $('#tb_role').bootstrapTable({
            url: '/Role/GetPageRoleList',         //请求后台的URL（*）
            method: 'get',                      //请求方式（*）
            toolbar: '#toolbar',                //工具按钮用哪个容器
            striped: true,                      //是否显示行间隔色
            cache: false,                       //是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
            pagination: true,                   //是否显示分页（*）
            sortable: false,                     //是否启用排序
            singleSelect: true,                     // 单选checkbox  
            sortOrder: "asc",                   //排序方式
            queryParams: myTableInit.queryParams,//传递参数（*）
            queryParamsType: "",
            sidePagination: "server",           //分页方式：client客户端分页，server服务端分页（*）
            pageNumber: 1,                       //初始化加载第一页，默认第一页
            pageSize: 10,                       //每页的记录行数（*）
            pageList: [10, 25, 50, 100],        //可供选择的每页的行数（*）
            strictSearch: true,
            showColumns: true,                  //是否显示所有的列
            showRefresh: true,                  //是否显示刷新按钮
            minimumCountColumns: 2,             //最少允许的列数
            clickToSelect: true,                //是否启用点击选中行
            //height: 630,                        //行高，如果没有设置height属性，表格自动根据记录条数觉得表格高度
            uniqueId: "id",                     //每一行的唯一标识，一般为主键列
            detailView: false,                   //是否显示父子表
            columns: [
                { radio: 'true' },
                { field: 'id', title: '编号' },
                { field: 'roleName', title: '角色名称' },
                { field: 'roleEncoding', title: '角色编码' },
                { field: 'roleDesc', title: '角色描述' },
                { field: 'addDate', title: '添加时间' },
                { field: 'remark', title: '备注' }
            ]
        });

        $('#tb_role').bootstrapTable("hideColumn", "id");//隐藏id列

    };

    //得到查询的参数
    myTableInit.queryParams = function (params) {
        var temp = {   //这里的键的名字和控制器的变量名必须一直，这边改动，控制器也需要改成一样的
            pageSize: params.pageSize,
            pageIndex: params.pageNumber,
            search_des: $("#search_des").val(),
            startTime: $("#search_start").val(),
            endTime: $("#search_end").val()
        };
        return temp;
    };
    return myTableInit;
};


var ButtonInit = function () {
    var oInit = new Object();
    //初始化数据
    oInit.Init = function () {
        //查询按钮点击事件
        $("#btn_query").click(function () {
            $('#tb_role').bootstrapTable("refresh");//刷新服务端的数据
        });
    };

    //角色新增按钮的点击事件
    $("#btn_add").click(function () {
        $("#RoleName").val("");
        $("#RoleEncoding").val("");
        $("#RoleDesc").val("");
        $("#Remark").val("");
        $("#addBox").modal("show");//弹出模态框
        Reset(); //重置表单样式至初始样式
    });

    //角色编辑按钮的点击事件
    $("#btn_edit").click(function () {
        var row = $('#tb_role').bootstrapTable("getSelections");//返回被选择的行，当没有行被选择，则返回空数组
        if (row.length != 1) {
            swal("错误", "请选中一行数据后编辑", "error");
            return;
        }

        currentRow = row[0];
        SetEditWindowContent(currentRow);
        EditReset();//初始化样式
        $("#editBox").modal("show");//弹出模态框
    });

    //权限配置按钮的点击事件
    $("#btn_authority").click(function () {
        var row = $('#tb_role').bootstrapTable("getSelections");//返回被选择的行，当没有行被选择，则返回空数组
        if (row.length != 1) {
            swal("错误", "请选中一行数据后配置权限", "error");
            return;
        }
        currentRow = row[0];
        AuthorizeConfit(currentRow.id);
        $("#authorityBox").modal("show");//弹出模态框
    });

    return oInit;
};


var start = {
    elem: '#search_start',
    format: "YYYY-MM-DD hh:mm:ss",
    min: "2018-01-01 00:00:00",
    max: "2099-06-16 23:59:59",
    istime: false,
    istoday: true,
    choose: function (datas) {
        end.min = datas;
    }
};


var end = {
    elem: '#search_end',
    format: "YYYY-MM-DD  23:59:59",
    min: "2018-01-01 00:00:00",
    max: "2099-06-16 23:59:59",
    istime: false,
    istoday: true,
    choose: function (datas) {
        start.max = datas;
    }
};


Date.prototype.Format = function (fmt) { //author: wangf 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}


//设置编辑弹窗的内容
function SetEditWindowContent(currentRow) {
    $("#editId").val(currentRow.id);
    $("#editRoleName").val(currentRow.roleName);
    $("#editRoleDesc").val(currentRow.roleDesc);
    $("#editRemark").val(currentRow.remark);
}

//权限配置
function AuthorizeConfit(roleId) {
    //获取当前角色所拥有的功能权限集合
    var authoritys = "";
    $.ajax({
        type: "get",
        url: "/Role/GetActionByRoleId",
        async: false,
        data: { roleId: roleId },
        success: function (result) {
            authoritys = result;
        }
    });

    //获取所有页面配置和功能配置
    var pageArr;//页面权限集集合
    var actionArr;//功能权限集合
    $.ajax({
        type: "get",
        url: "/Role/GetPageAndActionConfit",
        dataType: "json",
        async: false,
        success: function (result) {
            if (result != null) {
                $("#editAuthority").empty();
                pageArr = result.pageInfoList;
                var vHtml = "";
                for (var i = 0; i < pageArr.length; i++) {
                    var page = pageArr[i];
                    vHtml += '<div style="margin:20px">';
                    vHtml += '<label style="font-size:16px">' + page.pageName + '：</label><br/>';//添加页面名称

                    //添加页面功能名称
                    actionArr = result.actionInfoList;
                    for (var j = 0; j < actionArr.length; j++) {
                        var action = actionArr[j];
                        if (action.pageEncoding == page.pageEncoding) {
                            var isChecked = "";
                            if (authoritys.indexOf(action.actionEncoding) != -1) {
                                isChecked = ' checked="checked" ';
                            }
                            vHtml += '<label><input flag="Authorize" type="checkbox" onclick=handleClick(this) ' + isChecked + ' name="' + action.pageEncoding + '" value="' + action.actionEncoding + '" />' + '&nbsp;' + action.actionName + '</label>&nbsp;&nbsp;&nbsp;';
                        }
                    }
                    vHtml += '</div>';
                }

                //拼接提交按钮
                vHtml += "<div class=\'hr-line-dashed\'>";
                vHtml += "<div class=\'form-group\'>";
                vHtml += "<div class=\'col-sm-4 col-sm-offset-3\' style=\'margin-left:40%;\' >";
                vHtml += "<button class=\'btn btn-primary\' id=\'btnSaveAuthorize\' type=\'button\' onclick=\'SubmitAuthorize(" + roleId + ")\'>提交</button>";
                vHtml += "</div>";
                vHtml += "</div>";

                $("#editAuthority").append(vHtml);
            }
        }
    });
}


//权限配置项选中事件
function handleClick(obj) {
    var PageEncoding = $(obj).attr("name");//页面编码
    var ActionEncoding = $(obj).val();//功能编码

    //选中
    if ($(obj).is(":checked")) {
        //选中的功能不是查看,则将查看一起选中
        if (ActionEncoding.indexOf("-Select") == -1) {
            $('input[name="' + PageEncoding + '"]').each(function () {
                if ($(this).val() == (PageEncoding + '-Select')) {
                    $(this).prop("checked", true);
                }
            });
        }
    } else {
        //查看取消选中状态
        if (ActionEncoding.indexOf('-Select') != -1) {
            $('input[name="' + PageEncoding + '"]').each(function () {
                $(this).prop("checked", false);
            });
        }
    }

}


//权限页面信息提交
function SubmitAuthorize(roleId) {
    var vActionEncodings = "";//功能权限编码
    $('input[flag="Authorize"]').each(function () {
        if ($(this).is(":checked")) {
            vActionEncodings += $(this).val() + ",";
        }
    });

    vActionEncodings = vActionEncodings.replace(/[,]$/, "");//去掉最后一个逗号

    $.ajax({
        type: "post",
        url: "/Role/Authorize",
        dataType: "json",
        async: false,
        data: { roleId: roleId, actionEncodings: vActionEncodings },
        success: function (result) {
            if (result.code == 200) {
                $("#authorityBox").modal("hide");//隐藏模态框
                swal("授权结果", result.result, "success");
                $('#tb_role').bootstrapTable("refresh");//刷新服务端的数据
            } else {
                swal("授权结果", result.result, "error");
            }
        }
    });
}